﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace DalEntity
{
    public partial class Percurso : Modelo.Interface.IBaseBD
    {
        ShippingEntities db;
        public Percurso()
        {
            db = Base.GetInstance();
            }

        public object RetornaInstancia<T>(T obj)
            where T : class,new()
        {

            Percurso per =  GenericTypeConverter.ConvertType<T, Percurso>(obj);

            if (per.IdCliente != null)
            {
                int id = per.IdCliente.Value;
                per.Cliente= db.Cliente.SingleOrDefault(c => c.Id == id);
            }

            return per;

            
        }
        //IList<T> RetornaGeral<T>() where T : class,new() ;
        //IList<T> RetornaGeral<T>() 
        
        public IList<T> RetornaGeral<T>() where T : class,new()
        {
            db = new ShippingEntities();
            List<T> retorno = new List<T>();
            foreach (Percurso C in db.Percurso.ToList())
            {
                T valor = GenericTypeConverter.ConvertType<Percurso, T>(C);
                retorno.Add(valor);
            }
            return retorno;


            //db = new ShippingEntities();
            ////return (T?)TypeDescriptor.GetConverter(typeof(T)).ConvertFrom(s);
            //List<T> teste = new List<T>((IEnumerable<T>)db.Percurso.ToList());
            //return teste;

        }
        public Percurso ConverteModelEntity<K>(K objeto)
        {
            //  typeof(objeto) (object);

            Modelo.Percurso Percurso = new Modelo.Percurso();//objeto (K)(object); //: default(object);

            // = (Modelo.Percurso)Objeto;
            this.Id = Percurso.Id;
            this.Nome = Percurso.Nome;
            this.DistanciaTotal = Percurso.DistanciaTotal;
            this.IdCliente = Percurso.IdCliente;
            this.TempoEsperado = Percurso.TempoEsperado;

            return this;
        }

        public T RetornaBasePorID<T>(int id) where T : class,new()
        {

            return GenericTypeConverter.ConvertType<Percurso, T>(db.Percurso.SingleOrDefault(c => c.Id == id));
        }
       
    }




}


   


